package com.tools.generator.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;

import java.io.StringWriter;

/**
 * 模板工具栏
 * 这里使用的是 velocity 模板
 * @author Admin
 */
@Slf4j
public class TemplateUtils {

    /**
     * 获取模板渲染后的内容
     * @param template 模板路径
     * @param context 模板数据
     * @return 渲染后内容
     */
    public static String getTemplateContent(String template,VelocityContext context) {
        StringWriter sw = new StringWriter();
        Template tpl = Velocity.getTemplate(template, "UTF-8");
        tpl.merge(context, sw);
        return sw.toString();
    }

    /**
     * 填充模板内容
     * @param engine 引擎-->Velocity
     * @param context VelocityContext 上下文
     * @param content 模板内容
     * @return 填充后的字符串
     */
    public static String fillTemplateContent(VelocityEngine engine,VelocityContext context,String content){
        StringWriter writer = new StringWriter();
        boolean evaluate = engine.evaluate(context, writer, "", content);
        if (evaluate){
            log.info("生成文件路径:{}", writer);
            return writer.toString();
        }
        log.error("解析生成路径失败：{}", content);
        return "";
    }

    /**
     * (freemarker)获取模板渲染后的内容
     *
     * @param content   模板内容
     * @param dataModel 数据模型
     */
//    public static String getContent(String content, Map<String, Object> dataModel) {
//        if (dataModel.isEmpty()) {
//            return content;
//        }
//
//        StringReader reader = new StringReader(content);
//        StringWriter sw = new StringWriter();
//        try {
//            // 渲染模板
//            String templateName = dataModel.get("templateName").toString();
//            Template template = new Template(templateName, reader, null, "utf-8");
//            template.process(dataModel, sw);
//        } catch (Exception e) {
//            throw new ToolException("渲染模板失败，请检查模板语法", e);
//        }
//
//        content = sw.toString();
//
//        IoUtil.close(reader);
//        IoUtil.close(sw);
//
//        return content;
//    }

}
